const Admin = require('../models/Admin');
const { generateToken } = require('../utils/jwt');

/**
 * 管理员登录
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
exports.login = async (req, res) => {
    try {
        const { username, password } = req.body;
        
        // 验证请求
        if (!username || !password) {
            return res.status(400).json({
                success: false,
                message: '用户名和密码不能为空'
            });
        }
        
        // 查找管理员
        const admin = await Admin.findOne({ where: { username } });
        if (!admin) {
            return res.status(401).json({
                success: false,
                message: '用户名或密码错误'
            });
        }
        
        // 验证密码
        const isValidPassword = await admin.validatePassword(password);
        if (!isValidPassword) {
            return res.status(401).json({
                success: false,
                message: '用户名或密码错误'
            });
        }
        
        // 生成JWT令牌
        const token = generateToken({ 
            id: admin.id,
            username: admin.username,
            type: 'admin' 
        });
        
        // 返回成功响应
        return res.status(200).json({
            success: true,
            message: '管理员登录成功',
            data: {
                token,
                expiresIn: process.env.JWT_EXPIRES_IN
            }
        });
    } catch (error) {
        console.error('管理员登录错误:', error);
        return res.status(500).json({
            success: false,
            message: '服务器内部错误',
            error: process.env.NODE_ENV === 'development' ? error.message : undefined
        });
    }
}; 

/**
 * 获取 support@know1.ai 邮箱的最近10封邮件
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
exports.getSupportMails = async (req, res) => {
    try {
        const Imap = require('imap');
        const { simpleParser } = require('mailparser');
        const imapConfig = {
            user: process.env.IMAP_USER,
            password: process.env.IMAP_PASS,
            host: process.env.IMAP_HOST,
            port: process.env.IMAP__PORT ? parseInt(process.env.IMAP_PORT) : 993,
            tls: true
        };
        const imap = new Imap(imapConfig);
        function openInbox(cb) {
            imap.openBox('INBOX', true, cb);
        }
        imap.once('ready', function() {
            openInbox(function(err, box) {
                if (err) {
                    imap.end();
                    return res.status(500).json({ success: false, message: '打开邮箱失败', error: err.message });
                }
                // 没有邮件直接返回空数组
                if (box.messages.total === 0) {
                    imap.end();
                    return res.status(200).json({ success: true, data: [] });
                }
                // 只取最近10封
                const start = Math.max(1, box.messages.total - 9);
                const fetch = imap.seq.fetch(`${start}:${box.messages.total}`, {
                    bodies: '',
                    struct: true
                });
                const mails = [];
                fetch.on('message', function(msg) {
                    let mailBuffer = '';
                    msg.on('body', function(stream) {
                        stream.on('data', function(chunk) {
                            mailBuffer += chunk.toString('utf8');
                        });
                    });
                    msg.once('end', async function() {
                        try {
                            const parsed = await simpleParser(mailBuffer);
                            mails.push({
                                subject: parsed.subject,
                                from: parsed.from && parsed.from.text,
                                replyTo: parsed.replyTo && parsed.replyTo.text,
                                date: parsed.date,
                                text: parsed.text
                            });
                        } catch (e) {
                            // 跳过解析失败的邮件
                        }
                    });
                });
                fetch.once('error', function(err) {
                    imap.end();
                    return res.status(500).json({ success: false, message: '拉取邮件失败', error: err.message });
                });
                fetch.once('end', function() {
                    imap.end();
                    // 倒序（最新在前）
                    mails.sort((a, b) => new Date(b.date) - new Date(a.date));
                    res.status(200).json({ success: true, data: mails });
                });
            });
        });
        imap.once('error', function(err) {
            return res.status(500).json({ success: false, message: 'IMAP连接失败', error: err.message });
        });
        imap.connect();
    } catch (error) {
        return res.status(500).json({ success: false, message: '服务器内部错误', error: error.message });
    }
}; 